原码、反码、补码complement 您所在的位置:网站首页 正数的原码 反码 补码 原码、反码、补码complement

原码、反码、补码complement

2023-11-18 06:09| 来源: 网络整理| 查看: 265

原码、反码、补码complement

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

一、原码转为反码、补码complement 1、正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同. 2、负整数的符号位固定为1,由原码变为补码时,规则如下: (1)原码符号位1不变,整数的每一位二进制数位求反,得到反码.(2)反码符号位1不变,反码数值位最低位加1,得到补码.

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

二、反码转为原码

反码转换为原码也是一样,规则如下:

(1)正整数:原码、反码、补码完全一样,即符号位固定为0,数值位相同.(2)负整数:符号位不变,数值位分别“按位取反”,即可得到原码。

三、补码转为原码

  已知一个数的补码,求原码 的操作分两种情况: 

(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。 (2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。 

例如、将补码11100111转换成原码的过程如下:

最高位是1,说明这是一个负数。将补码除符号位外的所有位取反得到反码:10011000。

在反码的基础上,将所有位加1,得到原码:10011001,即-25。

四、通过二进制补码、反码、原码求十进制数值 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 函 数 名:bin_com2dec % 功 能:X_bin补码、反码、原码求十进制数dec % 输入参数: % % 1.参数X_bin:二进制的补码、反码、原码 % % 2.参数choice:1-补码;2-反码;3-原码 % 输出参数: % % 1.参数dec:求得的十进制数 % % 2.参数flag1: % % 作 者: % 日 期: % 版 本: % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%% 1.matlab由X_bin补码、反码、原码求十进制数dec %%%%%%%---START--OK---%%%%%%% % % % % function dec = bin_com2dec(X_bin,choice) %这里X_bin指的是二进制补码、反码、原码,最高位为符号位. len = length(X_bin); switch choice case 1 %补码按1 p = str2double(X_bin(1))*(-1)*power(2,len-1); for i=2:1:len p = p + str2double(X_bin(i))*power(2,len-i); end sprintf('二进制补码转为十进制结果为:%d',p) case 2 %反码按2 p = str2double(X_bin(1))*(-1)*(power(2,len-1)-1); for i=2:1:len p=p+str2double(X_bin(i))*power(2,len-i); end sprintf('二进制反码转为十进制结果为:%d',p) case 3 %原码按3 p = 0; for i=2:1:len p = p + str2double(X_bin(i))*power(2,len-i); end p = p*power(-1,str2double(X_bin(1))); sprintf('二进制原码转为十进制结果为:%d',p) otherwise %其他 errordlg('ERROR'); end dec = p; end % %%%%%%% 1.matlab由X_bin补码、反码、原码求十进制数dec %%%%%%%-----END-----%%%%%%%

调用 bin_com2dec 函数

X_bin = '1111111101111100'; choice = 1; %补码 dec = bin_com2dec(bin_data{i},choice); sprintf('二进制补码转为十进制结果为:%d', dec)

结果为:

ans = '二进制补码转为十进制结果为:-132'

在计算机系统中,数值一律用补码来表示(存储)。 

主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 

补码与原码的转换过程几乎是相同的。 

数值的 补码表示 也分两种情况: 

(1)正数的补码:与原码相同。 

                例如,+9的补码是00001001。 

(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 

      例如,-7的补码:因为是负数,则符号位为“1”,整个为10000111;其余7位为-7的绝对值+7的原码   0000111按位取反为1111000;再加1,所以-7的补码是11111001。 

已知一个数的补码,求原码 的操作分两种情况: 

(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。 (2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。 

        例如、已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为   “1”;其余7位1111001取反后为0000110;再加1,所以是10000111。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有